iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
Python

初學者的 30 天 Python 復健課程系列 第 10

復健第十天:不可思議的字典 Dictionary

  • 分享至 

  • xImage
  •  

到目前為止提及了 List、Tuple、Set,再加上今天將要複習的 Dictionary 字典,我們算是認識了四種可以存放多個元素的資料型態,其中 List 與 Dictionary 算是我個認覺得最重要的兩種,使用的頻率高出另外兩種不少。

字典為什麼叫字典?

字典 Dictionary 和其他三者不同的地方在於,List、Tuple、Set 裡面都是直接儲放各種資料型態的元素,然而 Dictionary 一如現實生活中的字典,會有一對鍵 Key 與值 Value。

好比現實生活中翻閱英文字典,如果我們查閱 blue,可以找到「名詞,藍色」或是「形容詞,憂鬱的」等幾種意思。在 Python 裡,「鍵 Key」即是「單字」,而「值 Value」則是「意思(內容物)」,所以當我們跟 Python 詢問 blue 這個鍵時,它會翻找字典並告訴我們有「藍色、憂鬱的」這幾種內容物。

如何創建一個 Dictionary?

還記得昨天我們在 Set 的文章裡,有提及使用 {} 時,如果沒有放入任何的元素時,例如:fruits = {},此時 fruits 不是一個 set,而會是一個空的 dictionary。(如果你現在露出一臉問號,那想必是不記得了。)

既然都忘了,我們從頭說說有哪些方式可以創建一個字典 Dictionary:

  • 使用 {} 大括號:

稍早才說,若 {} 裡面沒有放入任何東西,此時會創建一個空字典,然而我們如果一開始想要創建一個「有東西」的字典,則需要放入鍵值(Key and Value)。(特別注意:如果放入一般的元素,則會變成 set 集合)

```py
person = {
    'first_name':'Stephen',
    'last_name':'Curry',
    'age':34,
    'country':'USA',
    'is_marred':True,
    'skills':['crossover', 'dribble', '3points', 'logo shot'],
}

在這個範例中,我們可以得知幾件事:

  1. 字典裡面需要有鍵值,缺一不可。
  2. 鍵 key 通常會是一個字串。
  3. 值 value 可以任何資料型態(字串、整數、布林值、串列,甚至可以是一個字典)。
  • 使用類別 dict()

    # 引數需要是一個可迭代物件,而且裡面必須要有鍵值的搭配,不然會引起錯誤
    dict1 = dict([('name', 'John'), ('age', 30), ('city', 'New York')])
    print(dict1)  # {'name': 'John', 'age': 30, 'city': 'New York'}
    
    # 使用關鍵字引數 
    dict2 = dict(name='John', age=30, city='New York')
    print(dict2)  # {'name': 'John', 'age': 30, 'city': 'New York'}
    
    # 使用已存在的字典,再複製出一個新的字典
    existing_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
    dict3 = dict(existing_dict)
    print(dict3)  # {'name': 'John', 'age': 30, 'city': 'New York'}
    
  • 使用函數 zip()

    # zip() 函數裡需要有兩個值,且兩個值要是可對應的串列或元組
    keys = ['name', 'age', 'city']
    values = ['John', 30, 'New York']
    dict4 = dict(zip(keys, values))
    print(dict4)  # {'name': 'John', 'age': 30, 'city': 'New York'}
    

如何得知一個字典的長度?

這時又要請出我們的萬用好朋友 len() ,基本上用 len() 來查詢物件的長度準沒錯。

person = {
    'first_name':'Tim',
    'last_name':'Parsons',
    'age':29,
    }
print(len(person)) # 3

如何取得字典裡指定的值?

由於字典 dictionary 具有無排序性、可變性等特性,所以我們無法透過索引值來取得特定的值,然而,我們可以像真實世界翻閱字典,只要我們知道裡面有什麼什麼鍵 key,便可以得知該鍵對應的值 key。

person = {
    'first_name':'James',
    'last_name':'Bond',
    'age':41,
    }
}
print(person['first_name'])   # James
print(person['last_name'])    # Bond
print(person['age'])          # 41

我們也可以使用 get() 方法來查找對應的值,以前面的 person 為例,當我們使用 print(person.get('first_name')) 會印出 James,然而如果我們使用 print(person.get('gender')) ,這時候會印出 None 讓我們知道說「字典裡面沒有這個鍵值」。

字典裡的新增、查詢、修改與刪除

之前也有提及,我們可以透過新增 Create、查詢 Read、修改 Update、刪除 Delete 這幾個行為,迅速掌握一個東西的使用方式。

如何新增一個鍵值至現有的字典?

像是現實中的字典一樣,不會有單字沒有解釋,所以想要新增新的東西至現有的字典時,鍵與值缺一不可。

我們可以使用 [] 新增鍵值到現有的字典裡,讓我們直接看範例:

my_dict = {'name': 'John', 'age': 30}

# 新增 city 與對應的 New York 至 my_dict 這個字典
my_dict['city'] = 'New York'
print(my_dict)  # {'name': 'John', 'age': 30, 'city': 'New York'}

如何查詢字典裡是否有某個鍵值?

相信大家已經再熟悉不過,又要再請出我們的好朋友 in 運算子,但這邊有一點要注意的是,我們只能用 in 確認字典中是否有某個「鍵 key」,而不能確認是否有某個「值 value」,因為字典中每個單字(鍵)只會出現一次,但不同的單字(鍵)是有可能有同樣的意思(值)。

my_dict = {'name': 'John', 'age': 30}

print("name" in my_dict)    # True
print("gender" in my_dict)  # False
print("John" in my_dict)    # False

如何修改字典裡已經存在的鍵值?

跟新增鍵值類似,我們也可以使用 [] 修改已經存在的鍵值,只要是 [] 裡面放入的鍵 key 是已經存在於字典裡,此時透過 = 將重新賦值給該鍵。

person = {
    'first_name':'James',
    'last_name':'Brown',
    'age':18,
    'country':'American',
}

person['first_name'] = 'Mike'
person['age'] = 30

print(person) # {'first_name': 'Mike', 'last_name': 'Brown', 'age': 30, 'country': 'American'}

如何刪除字典裡的鍵值?

直接且暴力的方法,想必大家也相當熟悉——del,話不多說,直接來看怎麼使用。

person = {
    'first_name':'Jerry',
    'last_name':'Li',
    'age':25,
    'country':'Taiwan',
    'is_married':True,
}

del person['is_married']  # 刪除字典裡 is_married 的鍵值

print(person)             # {'first_name': 'Jerry', 'last_name': 'Li', 'age': 25, 'country': 'Taiwan'}

當然你也可以使用 del person 把整個 person 字典都刪除掉。

後記

寫到這裡,鐵人賽也進行了三分之一,開始會覺得寫文章是每天重要的一環,一方面受到完賽證明的驅使,另一方面也會因為寫文章,讓自己更熟悉語言與修改自己的筆記結構。

參與鐵人賽確實不是件容易的事,不過一旦鐵了心開始寫,並努力在每天的十二點以前送出文章,會逐漸找到對於自己的收穫,真心推薦!


上一篇
復健第九天:集合 Set
下一篇
復健第十一天:如果怎樣,要不然怎樣的條件邏輯 Conditionals
系列文
初學者的 30 天 Python 復健課程13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言